package com.java.yz.day12.ketang;

import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
    TreeMap类概述
        键是红黑树结构，可以保证键的排序和唯一性

    TreeMap案例
        HashMap<String,String>
        HashMap<Student,String>
 */

//需求：认为年龄和姓名一样就是同一个学生,实现从大到小的排序
public class TreeMapDemo1 {
    public static void main(String[] args) {
        //创建集合对象
        TreeMap<Student, String> studentStringTreeMap = new TreeMap<>();

        //添加集合元素
        studentStringTreeMap.put(new Student("柳宗元",20),"看诗");
        studentStringTreeMap.put(new Student("李清照",23),"读诗");
        studentStringTreeMap.put(new Student("白居易",22),"想诗");
        studentStringTreeMap.put(new Student("杜甫",26),"吟诗");
        studentStringTreeMap.put(new Student("李白",24),"写诗");
        studentStringTreeMap.put(new Student("李白",24),"写诗");

        /*从大到小的顺序排序，并且去除重复的元素
            杜甫==26==吟诗
            李白==24==写诗
            李清照==23==读诗
            白居易==22==想诗
            柳宗元==20==看诗
         */

        //遍历集合
        Set<Map.Entry<Student, String>> entries = studentStringTreeMap.entrySet();
        for (java.util.Map.Entry<Student, String> entry : entries) {
            Student key = entry.getKey();
            String name = key.getName();
            int age = key.getAge();
            String value = entry.getValue();
            System.out.println(name+"=="+age+"=="+value);
        }
//java.lang.ClassCastException: class com.java.yz.day12.ketang.Student cannot be cast to class java.lang.Comparable
        //会报这样的一个错，类型转换异常，因为TreeMap的底层是调用了Comparable，但是我们Student类里面没有，
        //所以有两个解决方案：
            //1.实现Comparable这个接口，然后重写compareTo（）方法
            //2.在本类中匿名内部类new这个接口Comparator<Student>(),重写compare方法
    }
}
